/*
 * Titulo: List.java
 * Autor: Oswaldo Ceballos Zavala
 * Descripcion: Clase abstracta para listas enlazadas parametrizadas.
 * 
 * Universidad Autonoma de Yucatan
 * 
 */
package aerodromo.util.estructurasDatos.lista;

/**
 *
 * @author Oswaldo.C, Diego Martínez
 */
public abstract class List<T> {
    
    protected ListNode<T> firstNode;
    protected ListNode<T> lastNode;
    protected int tam = 0;
    
    
    public int size() {
        return tam;
    }
    
    public boolean isEmpty(){
        return this.getFirstNode() == null;
    }
    
    public abstract void insertAtFirst( T element );
    
    public abstract void insertAtLast ( T element );
    
    public abstract T removeFromFisrt () throws EmptyListException;
    
    public abstract T removeFromLast() throws EmptyListException;
    
    public abstract T obtenerdeIndice(int indice);
    
    /**
     * @return the firstNode
     */
    public ListNode<T> getFirstNode() {
        return firstNode;
    }

    /**
     * @param firstNode the firstNode to set
     */
    public void setFirstNode(ListNode<T> firstNode) {
        this.firstNode = firstNode;
    }

    /**
     * @return the lastNode
     */
    public ListNode<T> getLastNode() {
        return lastNode;
    }

    /**
     * @param lastNode the lastNode to set
     */
    public void setLastNode(ListNode<T> lastNode) {
        this.lastNode = lastNode;
    }
    
    
} //fin clase List
